Aus Oxoscript wird NanoPy - mehr Infos

Sensor-Funktionen

Übersicht

Jede Oxocard-Hardware verfügt über unterschiedliche Sensoren. Die Tabelle zeigt im Überblick, welche Werte jeweils verfügbar sind.

FunktionConnectArtwork/GalaxyScienceScience+
getButtonjajajaja
getButtonsjajajaja
getAcceleration-jajaja
getAccelerationXY-jajaja
getTemperaturemit AIR-jaja
getHumiditymit AIR-jaja
getHumidityAbsolutemit AIR-jaja
getPressure--jaja
getAmbientRGB--jaja
getAmbientIR--jaja
getAmbientLux--jaja
getCO2mit AIR-berechnetja
getIAQmit AIR-jaja
getTVOCmit AIR-jaja
getETOH--ja-
getVOCmit AIR--ja
getVOCIndexmit AIR--ja
getNOxmit AIR--ja
getNOxIndexmit AIR--ja
getMicrophoneAmplitude--jaja
getMicrophoneDecibel--jaja
getMicrophoneFrequency--jaja
getTOF8x8mit ToF--ja
getTOF4x4mit ToF--ja

getTOF4x4

  getTOF4x4()->int[16]

Nur Oxocard- Science+, Connect+ToF-Cartridge

Der STMicroelectronics VL53L5CX ist ein 8 x 8 Multizonen Time-of-Flight-Sensor (ToF). Damit lassen sich Tiefenbilder von bis zu 4m mit einer Auflösung von 64 Pixeln machen.

Die Anwendungsbereiche sind vielfältig. Man kann damit die Umgebung abtasten und ein 3D-Bild erzeugen, Gesten erkennen, Distanzen messen oder Bewegungsmelder programmieren.

const THRESHOLD_DISTANCE = 500 # in mm

def onDraw():
    data = getTOF4x4()# reads the 64 (8x8) sensor data
    clear()
   
    for i in 16:
        distance = data[i]
            if distance < THRESHOLD_DISTANCE:
                x = 48*(i/4)
                y = 48*(i%4)
                drawRectangle(24+x, 24+y, 48, 48)
    update()
    delay(5)

getTOF8x8

  getTOF8x8()->int[64]

Nur Oxocard- Science+, Connect+ToF-Cartridge

Der STMicroelectronics VL53L5CX ist ein 8 x 8 Multizonen Time-of-Flight-Sensor (ToF). Damit lassen sich Tiefenbilder von bis zu 4m mit einer Auflösung von 64 Pixeln machen.

Die Anwendungsbereiche sind vielfältig. Man kann damit die Umgebung abtasten und ein 3D-Bild erzeugen, Gesten erkennen, Distanzen messen oder Bewegungsmelder programmieren.

const THRESHOLD_DISTANCE = 500 # in mm

def onDraw():
    data = getTOF8x8()# reads the 64 (8x8) sensor data
    clear()
    for i in 8+1:
        drawLine(24, 24+i*24, 240-24, 24+i*24)
        drawLine(24+i*24, 24, 24+i*24, 240-24)
    stroke(50,50,50)
    fill(255,0,0)
    for i in 64:
        distance = data[i]
            if distance < THRESHOLD_DISTANCE:
                x = 24*(i/8)
                y = 24*(i%8)
                drawRectangle(24+x, 24+y, 24, 24)
    update()
    delay(5)

getNOxIndex

  getNOxIndex()->float

Nur Oxocard-Science+, Connect+AIR-Cartridge

Gibt den aktuellen NOx-Index-Wert zwischen 0 und 500 zurück.

NOx steht für Stickoxidverbindungen, wie sie bei Rauch oder Feuer entstehen.

Diese Karte einhält den hochwertigen und sehr präzisen Sensirion SGP41-Sensor. Die Werte werden innert weniger Sekunden angezeigt.

Beispiel:

def onDraw():
    v = getNOxIndex()
    print(v)
    delay(10000)

Dieses Beispiel gibt den Wert alle 10 Sekunden im Terminal aus.

Nähere Angaben zu dem Wert kann man dem Datenblatt entnehmen.

(Quelle)

getNOx

  getNOx()->float

Nur Oxocard-Science+, Connect+AIR-Cartridge

Gibt den aktuellen NOx-Roh-Wert zurück.

NOx steht für Stickoxidverbindungen, wie sie bei Rauch oder Feuer entstehen.

Diese Karte einhält den hochwertigen und sehr präzisen Sensirion SGP41-Sensor. Die Werte werden innert weniger Sekunden angezeigt.

Beispiel:

def onDraw():
    v = getNOx()
    print(v)
    delay(10000)

Dieses Beispiel gibt den Wert alle 10 Sekunden im Terminal aus.

Nähere Angaben zu dem Wert kann man dem Datenblatt entnehmen.

(Quelle)

getVOCIndex

  getVOCIndex()->float

Nur Oxocard-Science+, Connect+AIR-Cartridge

Gibt den aktuellen VOC-Index-Wert zwischen 0 und 500 zurück.

VOC steht für Volatile Organic Compounds und beschreibt die Menge an gas- und dampfförmigen Substanzen organischen Ursprungs in der Luft.

Diese Karte einhält den hochwertigen und sehr präzisen Sensirion SGP41-Sensor. Die Werte werden innert weniger Sekunden angezeigt.

Beispiel:

def onDraw():
    v = getVOCIndex()
    print(v)
    delay(10000)

Dieses Beispiel gibt den Wert alle 10 Sekunden im Terminal aus.

Nähere Angaben zu dem Wert kann man dem Datenblatt entnehmen.

(Quelle)

getVOC

  getVOC()->float

Nur Oxocard-Science+

Gibt den aktuellen VOC Roh-Wert zurück.

VOC steht für Volatile Organic Compounds und beschreibt die Menge an gas- und dampfförmigen Substanzen organischen Ursprungs in der Luft.

Diese Karte einhält den hochwertigen und sehr präzisen Sensirion SGP41-Sensor. Die Werte werden innert weniger Sekunden angezeigt.

Beispiel:

def onDraw():
    tvoc = getVOC()
    print(tvoc)
    delay(10000)

Dieses Beispiel gibt den VOC-Wert alle 10 Sekunden im Terminal aus.

Nähere Angaben zu dem Wert kann man dem Datenblatt entnehmen. Der Hersteller empfiehlt für Messungen die Funktion getVOCIndex.

(Quelle)

getHumidityAbsolute

  getHumidityAbsolute()->float

Nur Oxocard-Science, Science+, Connect+AIR-Cartridge

Gibt die aktuelle absolute Luftfeuchtigkeit in g/m^3 zurück. Dieser Wert gibt die Menge an Wasserdampf (Feuchtigkeit) in der Luft an, unabhängig von der Temperatur.

Die maximale absolute Luftfeuchtigkeit von warmer Luft bei 30°C beträgt etwa 30g Wasserdampf.
Die maximale absolute Luftfeuchtigkeit von kalter Luft bei 0°C beträgt ca. 5 g Wasserdampf.

Die absolute Luftfeuchtigkeit wurde mit der folgenden Formel berechnet:

image (Quelle)

getAmbientLux

  getAmbientLux()->long

Nur Oxocard-Science, Science+

Gibt die Lichtintensität in Lux zurück.

Lux Flächen
0,0001 Mondloser, bedeckter Nachthimmel (Sternenlicht)
0.002 Mondloser, klarer Nachthimmel mit Luftglühen
0.05-0.3 Vollmond in einer klaren Nacht
3.4 Dunkelgrenze der bürgerlichen Dämmerung bei klarem Himmel
20-50 Öffentliche Bereiche mit dunkler Umgebung
50 Familienwohnzimmerbeleuchtung (Australien, 1998)
80 Bürogebäude Flur/Toilettenbeleuchtung
100 Sehr dunkler, bedeckter Tag
150 Bahnsteig eines Bahnhofs
320-500 Bürobeleuchtung
400 Sonnenaufgang oder Sonnenuntergang an einem klaren Tag.
1000 Tag mit Überstrahlung; typische TV-Studiobeleuchtung
10'000–25'000 Volles Tageslicht (keine direkte Sonne)
32'000–100'000 Direktes Sonnenlicht

getAccelerationXY

  getAccelerationXY()->vector

Gleich wie die getAcceleration()-Funktion, jedoch ohne die Z-Achse.

Der Rückgabewert ist vom Typ vector. Diese Klasse enthält zwei Objektvariablen x und y die vom Typ float sind.

v:vector
v = getAccelerationXY()

getMicrophoneFrequency

  getMicrophoneFrequency()->int

Nur Oxocard-Science, Science+

Gibt die aktuell dominanteste Frequenz in Hz zurück.

Die Frequenz wird mit Hilfe der Fast Fourier Transformation (fft) berechnet. Mögliche Werte sind: 250Hz, 375Hz, 500Hz, …, 15375Hz

getMicrophoneDecibel

  getMicrophoneDecibel()->byte

Nur Oxocard-Science, Science+

Gibt den aktuellen Geräuschpegel als Byte-Wert in Dezibel zurück.

Der Geräuschpegel wird anhand der Mikrofon-Amplitude berechnet:

noise = 20 * log10(micAmp) - 20  

Beispiel:

def onDraw():
    db = getMicrophoneDecibel()
    h = map(db, 0, 150, 0, 255)
    clear()
    fill(255,255,255)
    drawRectangle(110, 240-h, 20, 240)
    update()

Dieses Beispiel zeichnet einen Balken auf dem Display, dessen Höhe vom aktuellen Geräuschpegel abhängt. Puste auf das Mikrofon oder decke es ab, um die Wirkung zu sehen.

getMicrophoneAmplitude

  getMicrophoneAmplitude()->long

Nur Oxocard-Science, Science+

Gibt die aktuell dominanteste Mikrofonamplitude als Long-Wert zurück.

Die Amplitude wird mit Hilfe der Fast Fourier Transformation (fft) berechnet.

Beispiel:

def onDraw():
    amp = getMicrophoneAmplitude()
    h = map(amp, 0, 50000, 0, 255)
    clear()
    fill(255,255,255)
    drawRectangle(110, 240-h, 20, 240)
    update()

Dieses Beispiel zeichnet einen Balken auf dem Display mit einer Höhe, die von der Mikrofonamplitude abhängt. Puste auf das Mikrofon, um die Wirkung zu sehen.

getETOH

  getETOH()->float

Nur Oxocard-Science

Gibt den aktuellen ETOH-Wert in ppm zurück.

ETOH (bzw. Ethanol) ist eine flüchtige, brennbare, farblose Flüssigkeit und gehört zu den organischen chemischen Verbindungen.

Zu beachten ist, dass der ZMOD4410-Sensor eine Aufwärmzeit von etwa 2 Minuten benötigt. In dieser Zeit wird immer -1 zurückgegeben.

Beispiel:

def onDraw():
    etoh = getETOH()
    print(etoh)
    delay(10000)

Dieses Beispiel gibt den ETOH-Wert alle 10 Sekunden im Terminal aus.

getTVOC

  getTVOC()->float

Nur Oxocard-Science, Science+

Gibt den aktuellen TVOC in mg/m3 zurück.

TVOC steht für Total Volatile Organic Compounds und beschreibt die Menge an gas- und dampfförmigen Substanzen organischen Ursprungs in der Luft.

Als Referenz:

Wert Zustand
<0.3 Sehr gut
0.3-1.0 Gut
1.00-3.00 Mittel
3.0-10.0 Schlecht
>10.0 Sehr schlecht

Oxocard Science: Beachte, dass der ZMOD4410-Sensor eine Aufwärmzeit von etwa 2 Minuten benötigt. In dieser Zeit wird immer -1 zurückgegeben.

Oxocard Science+: Diese Karte einhält den hochwertigen und sehr präzisen Sensirion SGP41-Sensor. Die Werte werden innert weniger Sekunden angezeigt.

Beispiel:

def onDraw():
    tvoc = getTVOC()
    print(tvoc)
    delay(10000)

Dieses Beispiel gibt den TVOC-Wert alle 10 Sekunden im Terminal aus.

getIAQ

  getIAQ()->float

Nur Oxocard-Science, Science+

Gibt die aktuelle IAQ-Einstufung zurück.

IAQ steht für Indoor Air Quality und nimmt normalerweise einen Wert zwischen 0 und 5 an:

Wert Level Zustand
≤1,99 1 Sehr gut
2.00-2.99 2 Gut
3.00-3.99 3 Mittel
4.00-4.99 4 Schlecht
≥5.00 5 Sehr schlecht

Beachten Sie, dass der ZMOD4410-Sensor der Science-Karte eine Aufwärmzeit von etwa 2 Minuten benötigt. In dieser Zeit wird immer -1 zurückgegeben. Die Science+-Karte reagiert innert weniger Sekunden.

Beispiel:

def onDraw():
    iaq = getIAQ()
    print(iaq)
    delay(10000)

Dieses Beispiel gibt den IAQ-Wert alle 10 Sekunden im Terminal aus.

getCO2

  getCO2()->float

Nur Oxocard-Science, Science+, Connect+AIR-Cartridge

Gibt den aktuellen CO2-Wert in ppm zurück.

Die Oxocard Science enthält den ZMOD4410-Sensor. Diese hat eine Aufwärmzeit von etwa 2 Minuten. In dieser Zeit wird immer -1 zurückgegeben. Der CO2-Wert wird bei diesem Sensor nicht direkt gemessen, sondern mit einem speziellen Algorithmus. Der Startwert ist immer 400ppm und ändert sich mit der Zeit. Werte unter 1000ppm sind gut und Werte unter 800ppm sind ausgezeichnet. Der Algorithmus wird besser, je länger gemessen wird (ab mehreren Stunden).

Die Oxocard Science + und die AIR-Cartridge verfügen über einen Sensirion-Sensor (SCD41). Dieser ist hochpräzise und liefert exakte Werte innert Sekunden.

Beispiel:

def onDraw():
    co2 = getCO2()
    print(co2)
    delay(10000)

Dieses Beispiel gibt den CO2-Wert alle 10 Sekunden im Terminal aus.

getAmbientIR

  getAmbientIR()->long

Nur Oxocard-Science, Science+

Liefert eine Zahl je nach Stärke der Infrarotstrahlung (Wertebereich 0 bis 2^18).

Da die meisten Fernbedienungen von TV’s mit Infrarot kommunizieren, lassen sich diese Signale mit einem einfachen Programm sichtbar machen:

def onDraw():
    ir = getAmbientIR()
    clear()
    textFont(FONT_ROBOTO_32)
    drawText(10,10,ir)
    update()

getAmbientRGB

  getAmbientRGB()->color

Nur Oxocard-Science, Science+

Gibt das aktuelle Umgebungslicht als rote, grüne und blaue (RGB) Farbwerte zurück. Das Umgebungslicht wird mit dem APDS-9251 Sensor gemessen und so berechnet, dass es in den 0… 255 Bereich passt.

Beispiel:

def onDraw():
    ambient:color
    ambient = getAmbientRGB()
    print("R = " + ambient.r + "; G = " + ambient.g + "; B = " + ambient.b)
    delay(5000)

Dieses Beispiel gibt die gemessenen RGB-Farben alle 5 Sekunden im Terminal aus.

getPressure

  getPressure()->float

Nur Oxocard-Science, Science+

Gibt den aktuellen barometrischen Druck in mbar zurück. Der barometrische Druck wird mit dem Sensor MS560702BA03-50 mit einer Genauigkeit von ±1,5 mbar gemessen.

Beispiel:

def onDraw():
    pres = getPressure()
    print(pres)
    delay(10000)

Dieses Beispiel gibt den gemessenen Luftdruck alle 10 Sekunden im Terminal aus.

getHumidity

  getHumidity()->float

Nur Oxocard-Science, Science+, Connect+AIR-Cartridge

Gibt die aktuelle Luftfeuchtigkeit in %RH zurück. Die Luftfeuchtigkeit wird mit dem SHTC3-Sensor mit einer Genauigkeit von ±2 %RH gemessen.

Da Feuchtesensoren im Allgemeinen einen erheblichen Offset haben können, wird empfohlen, den Offset über das Einstellungsmenü der Oxocard-Science zu kalibrieren.

Beispiel:

def onDraw():
    humi = getHumidity()
    print(humi)
    delay(10000)

Dieses Beispiel gibt die gemessene Luftfeuchtigkeit alle 10 Sekunden im Terminal aus.

getTemperature

  getTemperature()->float

Nur Oxocard-Science, Science+, Connect+AIR-Cartridge

Gibt die aktuelle Temperatur als float in °C zurück. Die Temperatur wird mit dem SHTC3-Sensor mit einer Genauigkeit von ±0,2 °C gemessen.

Da Temperatursensoren im Allgemeinen einen erheblichen Offset haben können, wird empfohlen, den Offset über das Einstellungsmenü auf der Oxocard-Science zu kalibrieren.

Beispiel:

def onDraw():
    temp = getTemperature()
    print(temp)
    delay(10000)

Dieses Beispiel gibt die gemessene Temperatur alle 10 Sekunden im Terminal aus.

getAcceleration

  getAcceleration()->vector3D

Ermittelt die aktuellen Beschleunigungswerte in den drei Achsen x,y und z. Die Werte sind in G (G ~ 9.81m/s^2). Je nach Richtung werden die Werte >0 oder <0 angegeben.

Der Rückgabewert ist von Typ vector3D. Diese Klasse enthält drei Objektvariablen x,y, und z, die vom Typ float sind.

Beispiel:

def onDraw():
    push()
    background(0,0,0)
    stroke(255,255,255)
    v:vector3D
    v = getAcceleration()
    v1 = vector(x=v.x,y=v.y)
    v1.mulScalar(90)
    translate(120,120)
    noStroke()
    fill(100,100,100)
    drawCircle(0,0,28)
    noFill()
    stroke(255,255,255)
    drawCircle(-v1.x,v1.y,30)
    update()
    delay(50)
    pop()

Dieses Beispiel zeichnet eine Wasseruhr. Wenn die Karte schön horizontal ausgerichtet ist, werden die beiden Kreise zentriert.

getButton

  getButton()->byte

Prüft, ob ein Button gedrückt wurde.

0 = kein Button
1 = mitte
2 = auf
3 = rechts
4 = runter
5 = links

b = getButton()

Mit dieser Funktion kann nur jeweils EIN Button abgefragt werden.

getButtons

  getButtons()->buttons

Prüft, ob mehrere Buttons gedrückt wurden.

Die Funktion erzeugt ein Objekt der Klasse buttons.

Die Klasse ist hat folgende Objektvarianblen: up, down, left, right, middle. Diese Werte haben alle den Typ “bool”, d.h. können true oder false sein.

Mit dieser Funktion können mehrere Buttonclicks gleichzeitig abgefragt werden.

def onDraw():
    background(0,0,0)
    b:buttons = getButtons()
    if b.left and b.right:
        background(255,0,0)
    update()

(Der Bildschirm leuchtet nur rot, wenn links und rechts gleichzeitig gedrückt wird.)